﻿using System;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace Gui
{
    public partial class Softmet : Form
    {
        public Softmet()
        {
            InitializeComponent();
        }

        private void SoftmetStartClick(object sender, EventArgs e)
        {
            var argumentString = new StringBuilder();
            if (!string.IsNullOrEmpty(diffPath.Text))
                argumentString.Append(" -d " + diffPath.Text);
            if (!string.IsNullOrEmpty(logPath.Text))
                argumentString.Append(" -l " + logPath.Text);
            if (string.IsNullOrEmpty(diffPath.Text) & string.IsNullOrEmpty(logPath.Text))
            {
                MessageBox.Show("Необходимо указать директории для дифов и/или логов!");
                return;
            }
            if (string.IsNullOrEmpty(repoPath.Text))
            {
                MessageBox.Show("Необходимо указать репозиторий!");
                return;            
            }
            argumentString.Append(" -r " + repoPath.Text);

            if(!File.Exists("softmet.exe"))
            {
                MessageBox.Show("He найден softmet.exe");
                return;
            }
            var pProcess = new System.Diagnostics.Process
            {
                StartInfo =
                {
                    FileName = "softmet.exe",
                    Arguments = argumentString.ToString(),
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    RedirectStandardError = false
                }
            };
            pProcess.Start();
            pProcess.WaitForExit();
            softmetOutput.Text = pProcess.StandardOutput.ReadToEnd();
        }

        private void MetricsStartClick(object sender, EventArgs e)
        {
            var argumentString = new StringBuilder();
            if (string.IsNullOrEmpty(metDiffPath.Text))
            {
                MessageBox.Show("Необходимо указать директорию с дифами!");
                return;
            }
            argumentString.Append(" -d " + metDiffPath.Text);

            if (string.IsNullOrEmpty(metLogPath.Text))
            {
                MessageBox.Show("Необходимо указать директорию с логами!");
                return;
            }
            argumentString.Append(" -l " + metLogPath.Text);

            if (string.IsNullOrEmpty(metMetPath.Text))
            {
                MessageBox.Show("Необходимо указать директорию с метриками!");
                return;
            }
            argumentString.Append(" -m " + metMetPath.Text);

            if (string.IsNullOrEmpty(nodePath.Text))
            {
                MessageBox.Show("Необходимо указать путь до узла!");
                return;
            }
            argumentString.Append(" -p " + nodePath.Text);

            if (string.IsNullOrEmpty(revNumber.Text))
            {
                MessageBox.Show("Необходимо указать путь до узла!");
                return;
            }
            argumentString.Append(" -r " + revNumber.Text);
            
            if(!string.IsNullOrEmpty(filter.Text))
                argumentString.Append(" -f " + filter.Text);
            if (!string.IsNullOrEmpty(extend.Text))
                argumentString.Append(" -e " + extend.Text);

            if (!File.Exists("Metrics.exe"))
            {
                MessageBox.Show("He найден Metrics.exe");
                return;
            } 
            var pProcess = new System.Diagnostics.Process
            {
                StartInfo =
                {
                    FileName = "Metrics.exe",
                    Arguments = argumentString.ToString(),
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    RedirectStandardError = false
                }
            };
            pProcess.Start();
            pProcess.WaitForExit();
            metOutput.Text = pProcess.StandardOutput.ReadToEnd();
        }

        private void DiffDirBrowseClick(object sender, EventArgs e)
        {
            folderDialog.ShowDialog();
            diffPath.Text = folderDialog.SelectedPath;
        }

        private void LogDirBrowseClick(object sender, EventArgs e)
        {
            folderDialog.ShowDialog();
            logPath.Text = folderDialog.SelectedPath;
        }

        private void DiffDirBrowse2Click(object sender, EventArgs e)
        {
            folderDialog.ShowDialog();
            metDiffPath.Text = folderDialog.SelectedPath;
        }

        private void LogDirBrowse2Click(object sender, EventArgs e)
        {
            folderDialog.ShowDialog();
            metLogPath.Text = folderDialog.SelectedPath;
        }

        private void MetDirBrowseClick(object sender, EventArgs e)
        {
            folderDialog.ShowDialog();
            metMetPath.Text = folderDialog.SelectedPath;
        }
    }
}
